www.gusucode.com > LTE基带收发仿真系统matlab源码程序 > LTE baseband simulation/LTE_load_parameters.m

    % LTE_load_parameters 脚本函数 用于获取每个独立参数,并检查参数的取值范围是否恰当
% 请从 LTE_main_gui_final 运行该仿真平台
%
%  Author:		程式小组(徐萌 张妙 张晓庆)
%  Date:		2010-06-20
%  ==========================================================

errNum = 1; % 参数配置错误统计
errorMsg = []; % 参数配置错误提示

% 从文件读取或配置参数
if strcmp(LTE_par.setpar,'loadPar')
    inflie = '小区参数.dat';
    fidin=fopen(inflie,'r');                     % 打开原始数据文件
    k = 1;
    while ~feof(fidin)                           % 判断是否为文件末尾
        tline=fgetl(fidin);                        % 从文件读入一行文本(不含回车键)
        if ~isempty(tline)                         % 判断是否空行
            Para(k,:) = tline(1:4);
        end
        k = k+1;
    end
    
    fclose(fidin);
    Para_ = hex2dec(Para(1:end,:));             % 参数是十六进制表示,将其转为10进制
    % 仿真次数设为1
    LTE_par.nTime = 1;
    
    % 读取当前帧号
    LTE_par.iFrame = Para_(1);
    
    % 读取系统用户数
    if Para_(2) >= 1 && Para_(2) <= 10
        LTE_par.nUE = Para_(2);
        
    else
        errNum = errNum+1;
        errorMsg{errNum} = 'ERROR: 载入参数配置出错 系统用户数不合法';
        errNum = errNum+1;
        errorMsg{errNum} = 'HINT: 系统用户数取值范围为:1-10';

    end
    
    % 读取小区ID
    LTE_par.BS_par.cellID = Para_(3);
    
    % 读取系统带宽 0:20MHz 1:10MHz
    if Para_(4) == 0
        LTE_par.sysBand = 20000000;
    elseif Para_(4) == 1
        LTE_par.sysBand = 10000000;
    else
        errNum = errNum+1;
        errorMsg{errNum} = 'ERROR:载入参数配置出错 系统带宽配置不合法';
        errNum = errNum+1;
        errorMsg{errNum} = 'HINT:系统带宽取值为:{0:20MHz 1:10MHz}';
    end
    
    % 读取天线端口数,取值为1 2 或4
    if Para_(5) == 0
        LTE_par.BS_par.nAnt = 1;
    elseif Para_(5) == 1
        LTE_par.BS_par.nAnt = 2;
    elseif Para_(5) == 2
        LTE_par.BS_par.nAnt = 4;
    else
        errNum = errNum+1;
        errorMsg{errNum} = 'ERROR:载入参数配置出错 BS天线数不合法';
        errNum = errNum+1;
        errorMsg{errNum} = 'HINT:BS天线数应当为 1 2 4';
    end
    
    % 读取CP配置
    if Para_(6) == 0
        LTE_par.cyclicPrefix = 'normal'; % 此处不支持'extend'
    else
        errNum = errNum+1;
        errorMsg{errNum} = 'ERROR:载入参数配置出错 该平台暂不支持扩展循环前缀';
        errNum = errNum+1;
        errorMsg{errNum} = 'HINT:循环前缀取值为:{0:常规循环前缀}';
    end
    
    % 读取子帧号
    if Para_(7) >=0 && Para_(7) <= 9
        LTE_par.iSubFrame = Para_(7);
    else
        errNum = errNum+1;
        errorMsg{errNum} = 'ERROR:载入参数配置出错 子帧号配置不合法';
        errNum = errNum+1;
        errorMsg{errNum} = 'HINT:系统带宽取值为:0-9';
    end
    
    % 读取用户索引号,取值为0~9
    if Para_(8) >= 0 && Para_(8) <=9
        LTE_par.schedule.indexUE = Para_(8);
    else
        errNum = errNum+1;
        errorMsg{errNum} = 'ERROR:载入参数配置出错 用户索引号配置不合法';
        errNum = errNum+1;
        errorMsg{errNum} = 'HINT:用户索引号取值为:0-9';
    end
    
    % 读取当前UE的RNTI
    LTE_par.UE_par.RNTI = Para_(9);
    
    % 读取码流,取值为0:1个码字 1:2个码字
    if Para_(14) == 0 || Para_(14) == 1
        LTE_par.UE_par.nCW = Para_(14)+1;
    else
        errNum = errNum+1;
        errorMsg{errNum} = 'ERROR:载入参数配置出错 用户TB个数配置不合法';
        errNum = errNum+1;
        errorMsg{errNum} = 'HINT:用户传输块数(或称码字数)取值为:1或2';
    end
    
    % 读取调制方式 1:QPSK--2bit 2:16QAM--4bit 3:64QAM--6bit
    if Para_(10) == 1
        LTE_par.UE_par.Qm = 2*ones(LTE_par.UE_par.nCW,LTE_par.nUE);
    elseif Para_(10) == 2
        LTE_par.UE_par.Qm = 4*ones(LTE_par.UE_par.nCW,LTE_par.nUE);
    elseif Para_(10) == 3
        LTE_par.UE_par.Qm = 6*ones(LTE_par.UE_par.nCW,LTE_par.nUE);
    else
        errNum = errNum+1;
        errorMsg{errNum} = 'ERROR:载入参数配置出错 调制方式配置不合法';
        errNum = errNum+1;
        errorMsg{errNum} = 'HINT:调制方式取值为:{1:QPSK 2:16QAM 3:64QAM}';
    end
    
    % 读取预处理模式
    if Para_(11) == 1
        LTE_par.UE_par.preProcess = 'singleAnt';
    elseif Para_(11) == 2
        LTE_par.UE_par.preProcess = 'tranmitDiversity';
    elseif Para_(11) == 3
        LTE_par.UE_par.preProcess = 'spatialMultiplexing';
    else
        errNum = errNum+1;
        errorMsg{errNum} = 'ERROR:载入参数配置出错 预处理模式配置不合法';
        errNum = errNum+1;
        errorMsg{errNum} = 'HINT:预处理模式为:{1:singleAnt,2:tranmitDiversity or 3:spatialMultiplexing}';

    end
    
    
    % 读取用户层数,取值为1~4
    if Para_(12) >= 1 && Para_(12) <= 4
        LTE_par.UE_par.nLayer = Para_(12)*ones(1,LTE_par.nUE);
    else
        errNum = errNum+1;
        errorMsg{errNum} = 'ERROR:载入参数配置出错 用户层数配置不合法';
        errNum = errNum+1;
        errorMsg{errNum} = 'HINT:用户层数取值为:1-4';
    end
    
    % 读取码本号,仅在传输模式4 5 6下有效
    if Para_(13) >= 0 && Para_(13) <= 15
        LTE_par.UE_par.PMI = Para_(13)*ones(1,LTE_par.nUE);
    else
        errNum = errNum+1;
        errorMsg{errNum} = 'ERROR:载入参数配置出错 用户预编码配置不合法';
        errNum = errNum+1;
        errorMsg{errNum} = 'HINT:用户层预编码序号取值为:{0-3:2天线 0-15:4天线}';
        
    end
    
    % 读取传输块TB0 TB1大小,如果只有一个TB,则只读取 TB0
    if Para_(15)>0
        LTE_par.UE_par.sizeTB(1,:) = Para_(15)*ones(1,LTE_par.nUE);
    else
        errNum = errNum+1;
        errorMsg{errNum} = 'ERROR:载入参数配置出错 用户TB大小配置不合法';
        errNum = errNum+1;
        errorMsg{errNum} = 'HINT:参见36.213 V8.7.0 section 7.1.7.1';

    end
    if LTE_par.UE_par.nCW == 2
        if Para_(16)>0
            LTE_par.UE_par.sizeTB(2,:) = Para_(16)*ones(1,LTE_par.nUE);
        else
            errNum = errNum+1;
            errorMsg{errNum} = 'ERROR:载入参数配置出错 用户TB大小配置不合法';
            errNum = errNum+1;
            errorMsg{errNum} = 'HINT:参见36.213 V8.7.0 section 7.1.7.1';
        end
    end
    
    % 读取UE用于PDSCH的RE数目
    if Para_(17) > 0
        LTE_par.UE_par.nRE = Para_(17);
    else
        errNum = errNum+1;
        errorMsg{errNum} = 'ERROR:载入参数配置出错 用户RE数目配置不合法';
        errNum = errNum+1;
        errorMsg{errNum} = 'HINT:用户RE数目为正整数';
    end
    
    % 读取TB0和TB1冗余版本号,取值为0,1,2,3
    if Para_(18) >= 0 && Para_(18) <= 3
        LTE_par.UE_par.rvidx(1,:) = Para_(18)*ones(1,LTE_par.nUE);
    else
        errNum = errNum+1;
        errorMsg{errNum} = 'ERROR:载入参数配置出错 用户冗余版本号配置不合法';
        errNum = errNum+1;
        errorMsg{errNum} = 'HINT:用户冗余版本号为0-3';
    end
    if LTE_par.UE_par.nCW == 2
        if Para_(19) >= 0 && Para_(19) <= 3
            LTE_par.UE_par.rvidx(2,:) = Para_(19)*ones(1,LTE_par.nUE);
        else
            errNum = errNum+1;
            errorMsg{errNum} = 'ERROR:载入参数配置出错 用户冗余版本号配置不合法';
            errNum = errNum+1;
            errorMsg{errNum} = 'HINT:用户冗余版本号为0-3';
        end
    end
    
    % 读取KMIMO,在传输模式3和4下取2,其他模式下取1
    if Para_(20) >= 1 && Para_(20) <= 2
        LTE_par.UE_par.KMIMO = Para_(20);
    else
        errNum = errNum+1;
        errorMsg{errNum} = 'ERROR:载入参数配置出错 用户KMIMO配置不合法';
        errNum = errNum+1;
        errorMsg{errNum} = 'HINT:用户KMIMO取值为1或2';
    end
    
    % 读取用户类别
    if Para_(21) >= 1 && Para_(21) <= 5
        LTE_par.UE_par.category = Para_(21);
    else
        errNum = errNum+1;
        errorMsg{errNum} = 'ERROR:载入参数配置出错 用户类别配置不合法';
        errNum = errNum+1;
        errorMsg{errNum} = 'HINT:用户冗余版本号为1-5';
    end
    
    % 读取控制格式指示大小
    if Para_(22) >= 1 && Para_(22) <= 3
        LTE_par.CFI = Para_(22);
    else
        errNum = errNum+1;
        errorMsg{errNum} = 'ERROR:载入参数配置出错 系统CFI配置不合法';
        errNum = errNum+1;
        errorMsg{errNum} = 'HINT:系统CFI取值为1-3';
    end
    
    % 读取调制编码序号IMCS,取值为0~29
    if Para_(23) >= 0 && Para_(23) <= 29
        LTE_par.UE_par.IMCS = Para_(23)*ones(LTE_par.UE_par.nCW,LTE_par.nUE);
    else
        errNum = errNum+1;
        errorMsg{errNum} = 'ERROR:载入参数配置出错 用户调制编码序号配置不合法';
        errNum = errNum+1;
        errorMsg{errNum} = 'HINT:用户调制编码序号取值为0-28';
    end
    
    % 读取物理资源数
    if Para_(24) >= 0
        LTE_par.UE_par.nRB = Para_(24)*ones(1,LTE_par.nUE);
    else
        errNum = errNum+1;
        errorMsg{errNum} = 'ERROR:载入参数配置出错 用户物理资源数配置不合法';
        errNum = errNum+1;
        errorMsg{errNum} = 'HINT:用户物理资源数最大值参照系统带宽';
    end
    
    % 读取传输模式,共7种 1: 'singleAntennaPort' 2: 'tranmitDiversity' 3: 'largeDelayCDD' 4: 'closedLoopSM'
    %                    5:'multiuserMIMO'      6: 'singleLayerCLSM'  7: 'singlePort5'
    if Para_(25) >= 1 && Para_(25) <= 7
        LTE_par.UE_par.transMod = Para_(25);
    else
        errNum = errNum+1;
        errorMsg{errNum} = 'ERROR:载入参数配置出错 用户传输模式配置不合法';
        errNum = errNum+1;
        errorMsg{errNum} = 'HINT:用户传输模式为0-7';
    end
    
    % 系统平台完成收端过程,以下参数为'小区参数.dat'以外和相关收端
    LTE_par.UE_par.nAnt = 1;
    LTE_par.channelFreq = false;
    LTE_par.channelMod = 'Ideal';
    LTE_par.UE_par.M_0_SYMB = LTE_par.UE_par.nRE;
    
elseif strcmp(LTE_par.setpar,'manuPar')
    
    % =============== 系统公共参数 ===========================
    % 读取仿真时间
    LTE_par.nTime = par.nTime;
    
    % 读取起始帧号
    LTE_par.iFrame = par.iFrame;
    
    % 读取子帧号
    LTE_par.iSubFrame = par.iSubFrame;

    % 读取系统用户数
    LTE_par.nUE = par.nUE;
    
    % 读取小区ID
    LTE_par.BS_par.cellID = par.cellID;
    
    % 读取系统带宽 0:20MHz 1:10MHz
    if par.sysBand == 0
        LTE_par.sysBand = 20000000;
    elseif par.sysBand == 1
        LTE_par.sysBand = 10000000;
    end
    
    % 读取CP配置
    if par.cpStyle == 1
        LTE_par.cyclicPrefix = 'normal'; % 此处不支持'extend'
    else
        error('the parameter cyclic prefix is invalid. Please choose 0 \n')
    end
    
    
    % 读取用户类别
    LTE_par.UE_par.category = par.ueCateg;
    
    % 读取当前UE的RNTI
    LTE_par.UE_par.RNTI = par.RNTI;
    
    % 读取控制格式指示大小
    LTE_par.CFI = par.CFI;

    % ============= 用户公共参数 ==================================
    % 读取UE天线端口数,取值为1 2
    LTE_par.UE_par.nAnt = par.nRx;
    
    % 读取BS天线端口数,取值为1 2 4
    LTE_par.BS_par.nAnt = par.nTx;

    % 读取预处理模式
    if par.preProcess == 1
        LTE_par.UE_par.preProcess = 'singleAnt';
    elseif par.preProcess == 2
        LTE_par.UE_par.preProcess = 'tranmitDiversity';
    elseif par.preProcess == 3
        LTE_par.UE_par.preProcess = 'spatialMultiplexing';
    end
    
    % 读取传输模式,共7种 1: 'singleAntennaPort' 2: 'tranmitDiversity' 3: 'largeDelayCDD' 4: 'closedLoopSM'
    %                    5:'multiuserMIMO'      6: 'singleLayerCLSM'  7: 'singlePort5'
    LTE_par.UE_par.transMod = par.transMod;

    % 读取物理资源数
    LTE_par.UE_par.nRB = par.nRB*ones(1,LTE_par.nUE);
    
    % ================== 用户独立参数 ===============================
    nUE = LTE_par.nUE;
    LTE_par.UE_par.nLayer = zeros(1,nUE); % 用户层数
    LTE_par.UE_par.PMI = zeros(1,nUE); % 预编码序号
    LTE_par.UE_par.rvidx = zeros(2,nUE); % 重传冗余版本
    LTE_par.UE_par.IMCS = zeros(2,nUE); % 调制编码序号
    LTE_par.UE_par.Qm = zeros(2,nUE); % 调制方式
    LTE_par.UE_par.nRE = zeros(1,nUE); % 资源粒子数
    LTE_par.UE_par.M_0_SYMB = zeros(1,nUE); % 码字0的复值符号数
    LTE_par.UE_par.sizeTB = zeros(2,nUE); % 传输块大小
    for iUE = 1:nUE
        if iUE <= 2
            % 不多于两个用户时,从界面上独立配置两个用户参数
           LTE_par.UE_par.nCW(iUE) = par.nCW(iUE); % 用户码字数
           LTE_par.UE_par.nLayer(iUE) = par.nLayer(iUE); % 用户层数
           LTE_par.UE_par.PMI(iUE) = par.PMI(iUE); % 用户PMI
           for iTB =1: LTE_par.UE_par.nCW(iUE)
               LTE_par.UE_par.rvidx(iTB,iUE) = par.rvidx(iTB,iUE); % 用户循环冗余版本
               LTE_par.UE_par.IMCS(iTB,iUE) = par.IMCS(iTB,iUE); % 用户编码调制序号
           end
           
        else
           % 多于两个用户时,从界面上独立配置前两个用户参数,其他用户独立参数参照UE1
           LTE_par.UE_par.nCW(iUE) = par.nCW(1); % 用户码字数
           LTE_par.UE_par.nLayer(iUE) = par.nLayer(1);
           LTE_par.UE_par.PMI(iUE) = par.PMI(1);
           for iTB =1: LTE_par.UE_par.nCW(iUE)
               LTE_par.UE_par.rvidx(iTB,iUE) = par.rvidx(iTB,1); % 用户循环冗余版本
               LTE_par.UE_par.IMCS(iTB,iUE) = par.IMCS(iTB,1); % 用户编码调制序号
           end
       end
        
    end
    
end

% infoSize = [120 176 208 256 328 424 504 584 680 776 776 872 1000 1128 1256 1416 1544 1544 1608 1800 1992 2152 2344 2472 2664 2856 2984 3112 3752];
% IMCS = 9;
% if IMCS<=9
%     ITBS = IMCS;
%     Qm = 2;
% elseif IMCS<=16
%     ITBS = IMCS-1;
%     Qm = 4;
% else
%     ITBS = IMCS-2;
%     Qm = 6;
% end
% LTE_par.UE_par.Qm = Qm*ones(LTE_par.UE_par.nCW,LTE_par.nUE); % 仅测试用
% LTE_par.UE_par.sizeTB(1,:) = infoSize(IMCS+1)*ones(1,LTE_par.nUE); % 仅测试用
% LTE_par.UE_par.nRE = 660-30; % 仅测试用 去掉单天线导频位置 cfi=2 720 cfi = 3 660
% LTE_par.UE_par.nRB = 5*ones(1,LTE_par.nUE); % 仅测试用
% LTE_par.UE_par.IMCS = IMCS*ones(LTE_par.UE_par.nCW,LTE_par.nUE);% 仅测试用
% LTE_par.CFI = 3;

% IMCS	ITBS	信息	码率	ratex1024	调制
% 0     0	120     0.1143	117	2
% 1     1	176     0.1587	163	2
% 2     2	208     0.1841	189	2
% 3     3	256     0.2222	228	2
% 4     4	328     0.2794	286	2
% 5     5	424     0.3556	364	2
% 6     6	504     0.4190	429	2
% 7     7	584     0.4825	494	2
% 8     8	680     0.5587	572	2
% 9     9	776     0.6349	650	2
% 10	9	776     0.3175	325	4
% 11	10	872     0.3556	364	4
% 12	11	1000	0.4063	416	4
% 13	12	1128	0.4571	468	4
% 14	13	1256	0.5079	520	4
% 15	14	1416	0.5714	585	4
% 16	15	1544	0.6222	637	4
% 17	15	1544	0.4148	425	6
% 18	16	1608	0.4317	442	6
% 19	17	1800	0.4825	494	6
% 20	18	1992	0.5333	546	6
% 21	19	2152	0.5757	589	6
% 22	20	2344	0.6265	641	6
% 23	21	2472	0.6603	676	6
% 24	22	2664	0.7111	728	6
% 25	23	2856	0.7619	780	6
% 26	24	2984	0.7958	815	6
% 27	25	3112	0.8296	850	6
% 28	26	3752	0.9989 	1023	6